/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanCombatDefaite.java
 *
 * Created on 9 janv. 2012, 14:50:21
 */
package InterfaceGraphique.commonPannel;

import InterfaceGraphique.MainApplication;
import cartes.Monstre;
import common.Constantes;
import comportement.IncidentFacheux;
import java.awt.Font;
import java.awt.Image;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;

/**
 *
 * @author ophelie.moyssan
 */
public class PanCombatDefaite extends javax.swing.JPanel {

    private Monstre monstre;
    private int resultat=0;
        
    
    /** Creates new form PanCombatDefaite */
    public PanCombatDefaite() {
        this.setBackground(new java.awt.Color(110,48,34));
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        texte_incident = new javax.swing.JLabel();
        resultat_de_incident = new javax.swing.JLabel();
        boutonDe = new javax.swing.JButton();
        bouton_FIN = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        lMonstreImage = new javax.swing.JLabel();
        lDeImage = new javax.swing.JLabel();
        lMessageResultat = new javax.swing.JLabel();

        setMinimumSize(new java.awt.Dimension(820, 600));
        setPreferredSize(new java.awt.Dimension(820, 600));
        setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel2.setForeground(new java.awt.Color(213, 151, 0));
        jLabel2.setText("Tentez de vous enfuir en lançant le dé !");
        jLabel2.setName("jLabel2"); // NOI18N
        add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 500, -1, -1));
        try {
            Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/polices/cartoon.ttf"));
            font = font.deriveFont(24.0f);
            this.jLabel2.setFont(font);
        } catch (Exception ex) {
            Logger.getLogger(PanActionInit.class.getName()).log(Level.SEVERE, null, ex);
        }

        texte_incident.setText("jLabel2");
        texte_incident.setName("texte_incident"); // NOI18N
        add(texte_incident, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 90, -1, -1));

        resultat_de_incident.setText("jLabel2");
        resultat_de_incident.setName("resultat_de_incident"); // NOI18N
        add(resultat_de_incident, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 140, -1, -1));

        boutonDe.setText("Lancer le dé");
        boutonDe.setName("boutonDe"); // NOI18N
        boutonDe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                boutonDeActionPerformed(evt);
            }
        });
        add(boutonDe, new org.netbeans.lib.awtextra.AbsoluteConstraints(330, 560, -1, -1));

        bouton_FIN.setText("Fin du combat");
        bouton_FIN.setToolTipText("");
        bouton_FIN.setName("bouton_FIN"); // NOI18N
        bouton_FIN.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bouton_FINActionPerformed(evt);
            }
        });
        add(bouton_FIN, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 560, -1, -1));

        jLabel3.setForeground(new java.awt.Color(213, 151, 0));
        jLabel3.setText("Votre niveau n'est pas suffisant pour combattre le monstre.");
        jLabel3.setName("jLabel3"); // NOI18N
        add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 40, -1, -1));
        try {
            Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/polices/cartoon.ttf"));
            font = font.deriveFont(24.0f);
            this.jLabel3.setFont(font);
        } catch (Exception ex) {
            Logger.getLogger(PanActionInit.class.getName()).log(Level.SEVERE, null, ex);
        }

        lMonstreImage.setText("555");
        lMonstreImage.setName("lMonstreImage"); // NOI18N
        add(lMonstreImage, new org.netbeans.lib.awtextra.AbsoluteConstraints(520, 90, -1, -1));

        lDeImage.setName("lDeImage"); // NOI18N
        add(lDeImage, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 190, -1, -1));

        lMessageResultat.setForeground(new java.awt.Color(213, 151, 0));
        lMessageResultat.setText("jLabel1");
        lMessageResultat.setName("lMessageResultat"); // NOI18N
        add(lMessageResultat, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 500, -1, -1));
        try {
            Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/polices/cartoon.ttf"));
            font = font.deriveFont(20.0f);
            this.lMessageResultat.setFont(font);
        } catch (Exception ex) {
            Logger.getLogger(PanActionInit.class.getName()).log(Level.SEVERE, null, ex);
        }
    }// </editor-fold>//GEN-END:initComponents

    private void boutonDeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_boutonDeActionPerformed
        // TODO add your handling code here:
        this.resultat = 0;
        while (this.resultat==0){    
            this.resultat = MainApplication.getJoueurEnCours().lancerDe();
        }
        
        if ( this.resultat >= 1 && this.resultat <= 6){
            ImageIcon imageCarte = new ImageIcon(getClass().getResource("/de/D" + this.resultat +".gif"));
            ImageIcon imageRedim = new ImageIcon(imageCarte.getImage().getScaledInstance(110, 135, Image.SCALE_DEFAULT));
            this.lDeImage.setIcon(imageRedim);
            
            this.jLabel2.setVisible(false);
            this.boutonDe.setVisible(false);
            this.bouton_FIN.setVisible(true);
            this.lDeImage.setVisible(true);
        }     
        
        
        
        
        if (resultat >= 5)
        {
            //déguerpir
            this.lMessageResultat.setText("Vous pouvez déguerpir !");
            this.lMessageResultat.setVisible(true);
            this.bouton_FIN.setText(Constantes.FIN_COMBAT);
            //this.setResultat(0);
        }
        else
            // vous avez perdu
        {
            this.lMessageResultat.setText("Raté, le monstre vous inflige un incident facheux !");
            this.lMessageResultat.setVisible(true);
            
            
            
        }
            /*if (monstre.choix == 0 )
                //le joueur n'a pas le choix pour son incident facheux
            {
                this.affichage_incident(0);
            }
            else if (monstre.choix == 1 )
                //le joueur doit lancé un dé
            {
                int de = 0 ;
                de=MainApplication.getJoueurEnCours().lancerDe();
                MainApplication.lancementDe(de);
                
                if ( monstre.getNom().equals("EscargotsSousAcide"))
                {
                    
                    // à revoir , pour l'instant, défausser 3 cartes
                    //affichage du texte de l'incident facheux
                    // défausser nombre de cartes
                    this.affichage_incident(0);
                    
                }
                else //c'est le 3872 orques
                {
                    
                    if (de > 2 )
                    {
                        this.texte_incident.setText("<html>Vous perdez " + de + "niveaux");
                        MainApplication.getJoueurEnCours().upNiveau(-resultat, false);                                   this.bouton_FIN.setText(Constantes.FIN_COMBAT);
                    }
                    else
                        // vous êtes mort
                    {
                        this.affichage_incident(0);
                        
                    }
                }
                
                
                this.resultat_de_incident.setVisible(true);
                this.resultat_de_incident.setText(" ");
            }
            else if (monstre.choix == 2)
                //on teste les classes
            {
                if ( monstre.getNom().equals("Horreur"))
                {
                    //si c'est un magicien
                    if (MainApplication.getJoueurEnCours().getInventaire().getClasse().contains(Constantes.MAGICIEN))
                    {
                        //défausser carte
                        this.affichage_incident(0);
                        
                    }
                    else
                    {
                        //mort
                        this.affichage_incident(1);
                        
                    }
                    
                }
                
            }
            else if (monstre.choix == 3)
                //on défausse l'inventaire
            {
                //défausser carte
                
                
                
                if ( monstre.getNom().equals("BigFoot") || monstre.getNom().equals("Morpions") || monstre.getNom().equals("LePreuxChaun")
                        || monstre.getNom().equals("Troliste")|| monstre.getNom().equals("BinoclarHurleur"))
                    
                    //defausser carte speciales
                {
                    this.affichage_incident(0);
                }
                
                else if ( monstre.getNom().equals("Tut"))
                    //defausse main et inventaire
                {
                    IncidentFacheux un = un_incident.get(0);
                    un.provoquer(MainApplication.getJoueurEnCours());
                    IncidentFacheux deux = un_incident.get(1);
                    deux.provoquer(MainApplication.getJoueurEnCours());
                    this.texte_incident.setText("Voici vos incidents:  " + un.getDescription() + " et " + deux.getDescription() );
                    this.texte_incident.setVisible(true);
                    
                    
                }
                else
                    //on défausse tout l'inventaire
                {
                    this.affichage_incident(0);
                    
                }
                
                
            }
            else if (monstre.choix == 4)
                //on défausse la main
            {
                this.affichage_incident(1);
                
                
            }
            else if (monstre.choix == 5)
                //perte bizarre de niveau
            {
                if ( monstre.getNom().equals("Succube"))
                    //defausse main et inventaire
                {
                    if (MainApplication.getJoueurEnCours().getInventaire().getRace().contains(Constantes.ELFE))
                    {
                        this.affichage_incident(1);
                    }
                    else {
                        
                        this.affichage_incident(0);
                        
                    }
                    
                    
                }
                else if( monstre.getNom().equals("Amazone")){
                    this.affichage_incident(1);
                    
                }
                else if( monstre.getNom().equals("SuceurDeTete")){
                    IncidentFacheux un = un_incident.get(0);
                    un.provoquer(MainApplication.getJoueurEnCours());
                    IncidentFacheux deux = un_incident.get(1);
                    deux.provoquer(MainApplication.getJoueurEnCours());
                    this.texte_incident.setText("Voici vos incidents:  " + un.getDescription() + " et " + deux.getDescription() );
                    this.texte_incident.setVisible(true);
                    
                    
                }
                else{
                    this.affichage_incident(0);
                }
                
                
            }
            this.setResultat(0);
            
            
            
            
            
            
            
            //appel à la fonction incident facheux
            
            this.bouton_FIN.setText(Constantes.FIN_COMBAT);
            
            
            this.bouton_FIN.setText(Constantes.FIN_COMBAT);
            
            
        }*/
        //this.dispose();
        //this.setDefaultCloseOperation(0);
        // System.exit(0);
        
    }//GEN-LAST:event_boutonDeActionPerformed

    private void bouton_FINActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bouton_FINActionPerformed
        // TODO add your handling code here:
        //récupération de l'incident facheux de la carte monstre
        if( this.resultat < 5) {
            for( IncidentFacheux incident : monstre.getIncidentFacheux() ) {
                incident.provoquer(MainApplication.getJoueurEnCours());
            }            
        }
        MainApplication.endCombat();
    }//GEN-LAST:event_bouton_FINActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton boutonDe;
    private javax.swing.JButton bouton_FIN;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel lDeImage;
    private javax.swing.JLabel lMessageResultat;
    private javax.swing.JLabel lMonstreImage;
    private javax.swing.JLabel resultat_de_incident;
    private javax.swing.JLabel texte_incident;
    // End of variables declaration//GEN-END:variables
    
    public void load(Monstre m) {
        this.monstre = m;
        this.resultat=0;
        
        ImageIcon imageCarte = new ImageIcon(getClass().getResource(m.getCheminImage()));
        ImageIcon imageRedim = new ImageIcon(imageCarte.getImage().getScaledInstance(253, 400, Image.SCALE_DEFAULT));
        this.lMonstreImage.setIcon(imageRedim); //
        
        this.bouton_FIN.setVisible(false);   
        this.texte_incident.setVisible(false);
        this.resultat_de_incident.setVisible(false);
        this.lDeImage.setVisible(false);
        this.lMessageResultat.setVisible(false);
        this.boutonDe.setVisible(true);
        this.jLabel2.setVisible(true);
    }
    
    private void affichage_incident(int nombre){
        ArrayList<IncidentFacheux> un_incident;
        un_incident = monstre.getIncidentFacheux();
        
        IncidentFacheux un = un_incident.get(nombre);
        un.provoquer(MainApplication.getJoueurEnCours());
        //affichage du texte de l'incident facheux
        this.texte_incident.setText("Voici votre incident:  " + un.getDescription());
        this.texte_incident.setVisible(true);
        
    }
    
    public int getResultat() {
        return resultat;
    }

    public void setResultat(int resultat) {
        this.resultat = resultat;
    }
}
